home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / fdf.zoo / elib.zoo / getopt.c < prev    next >
C/C++ Source or Header  |  1991-05-08  |  1KB  |  68 lines

  1. /*LINTLIBRARY*/
  2. #ifndef NULL
  3. #define NULL    0
  4. #endif
  5. #ifndef EOF
  6. #define EOF    (-1)
  7. #endif
  8. #define ERR(s, c)    if(opterr){\
  9.     char errbuf[3];\
  10.     errbuf[0] = c; errbuf[1] = '\r'; errbuf[2] = '\n';\
  11.     (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
  12.     (void) write(2, s, (unsigned)strlen(s));\
  13.     (void) write(2, errbuf, 3);}
  14.  
  15. extern int strcmp();
  16. extern char *strchr();
  17.  
  18. int    opterr = 1;
  19. int    Optind = 1;
  20. int    optopt;
  21. char    *optarg;
  22.  
  23. int
  24. getopt(argc, argv, opts)
  25. int    argc;
  26. char    **argv, *opts;
  27. {
  28.     static int sp = 1;
  29.     register int c;
  30.     register char *cp;
  31.  
  32.     if(sp == 1)
  33.         if(Optind >= argc ||
  34.            argv[Optind][0] != '-' || argv[Optind][1] == '\0')
  35.             return(EOF);
  36.         else if(!strcmp(argv[Optind], "--")) {
  37.             Optind++;
  38.             return(EOF);
  39.         }
  40.     optopt = c = argv[Optind][sp];
  41.     if(c == ':' || (cp=strchr(opts, c)) == NULL) {
  42.         ERR(": illegal option -- ", c);
  43.         if(argv[Optind][++sp] == '\0') {
  44.             Optind++;
  45.             sp = 1;
  46.         }
  47.         return('\0');
  48.     }
  49.     if(*++cp == ':') {
  50.         if(argv[Optind][sp+1] != '\0')
  51.             optarg = &argv[Optind++][sp+1];
  52.         else if(++Optind >= argc) {
  53.             ERR(": option requires an argument -- ", c);
  54.             sp = 1;
  55.             return('\0');
  56.         } else
  57.             optarg = argv[Optind++];
  58.         sp = 1;
  59.     } else {
  60.         if(argv[Optind][++sp] == '\0') {
  61.             sp = 1;
  62.             Optind++;
  63.         }
  64.         optarg = NULL;
  65.     }
  66.     return(c);
  67. }
  68.